﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson6 : MonoBehaviour
{
    // Start is called before the first frame update
    public UISprite A;
    public UISprite B;
    void Start()
    {
        #region 控件自带事件的局限性
        // 目前复合控件只提供了一些常用的事件监听方式
        // 比如
        // Button - 点击
        // Toggle - 值变化
        // 等等
        // 如果想要制作 按下 抬起 长按等功能 复用现有的知识是无法完成的
        #endregion 

        #region NGUI事件 响应函数
        //添加碰撞器的对象
        //NGUI提供了一些复用反射调用的函数
        //经过 OnHover(bool isOver)
        //按下 OnPress(bool pressed)
        //点击 OnClick()
        //双击 OnDoubleClick()
        //拖曳开始 OnDragStart()
        //拖曳中 OnDrag(Vector2 )
        //拖曳结束 OnDragEnd()
        //拖曳经过某对象 OnDragOver(GameObject go)
        //拖曳离开某对象 OnDragOut(GameObject go)
        //等等
        //缺点：响应的脚本函数必须要挂在对应的对象身上，才能响应
        #endregion

        #region 更加方便的UIEventListener和UIEventTrigger
        //他们帮助我们封装了所有 特殊响应函数
        //可以通过它进行管理添加
        //1.UIEventListener 适合代码添加
        UIEventListener listener = UIEventListener.Get(A.gameObject);
        listener.onPress += (obj, isPress) =>
        {
            print(obj.name + "被按下或抬起了" + isPress);
        };

        listener.onDragStart += (obj) =>
        {
            print("开始拖曳");
        };

        //2.UIEventTrigger适合Inspector面板 关联脚本添加

        //UIEventListener和UIEventTrigger区别
        //1.Listener更适合 代码添加监听 Trigger适合拖曳对象添加监听
        //2.Listenner传入的参数更具体 Trigger就不会传入参数 我们需要 在函数中判断处理逻辑

        #endregion
    }

    void OnPress(bool pressed)
    {
        if (pressed)
        {
            print("按下");
        }
        else
        {
            print("抬起");
        }
    }

    public void Press()
    {
        print("响应 Press 事件 按下");
    }

    void OnHover(bool isOver)
    {
        if (isOver)
        {
            //print("鼠标经过");
        }
        else
        {
            //print("鼠标离开");
        }
    }

    void OnClick()
    {
        print("点击相关");
    }

    void OnDoubleClick()
    {
        print("双击相关");
    }

    void OnDragStart()
    {
        print("开始拖曳");
    }

    void OnDrag(Vector2 delta)
    {
        //print("拖曳中" + delta);
    }

    void OnDragEnd()
    {
        print("拖曳结束");
    }

    //obj表示拖动的对象
    void OnDragOver(Object obj)
    {
        print("拖曳经过" + obj.name);
    }

    //obj表示拖动的对象
    void OnDragOut(Object obj)
    {
        print("拖曳离开" + obj.name);
    }
}
